package thinkingInJava;

/**
 * learn14
 * @author jieji
 *
 */
/**
 * 面向对象编程的基本目的就是让代码只操作基类 
 * 基类设计为abstract可以强制子类覆盖
 * 在编译时期又泛型来确保类信息,在运行时有类型转换来确保类的类型
 * 
 * 构造器也是静态函数
 * 
 * 
 *
 */
public class Learn14 {
	static {
		System.out.println("static" + "只要类被jvm加载就执行");
	}
	{
		System.out.println("{}" + "创建对象时候才执行");
	}

	public static void main(String[] args) {
		t1();
	}

	public static void t1() {
		// 不行
		//D d = new D();

		System.out.println(new E() instanceof D);
		/*
		 * d.setName("d"); E ee=E.class.cast(d);
		 * System.out.println(ee.getName());
		 */
	}

}

class D {
	private String name;
	static{
		System.out.println("只有在被需要时才加载");
	}
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

class E extends D {
	/*
	 * private String name;
	 * 
	 * public String getName() { return name; }
	 * 
	 * public void setName(String name) { this.name = name; }
	 */

}
